package com.lyf.scm.plan.insfrastructure.db.mapper;

import com.lyf.scm.plan.insfrastructure.db.dataobject.DirectlyStoreDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.SalesPlanSelectDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.bigdata.DirectlyStoreInDO;
import com.lyf.scm.plan.insfrastructure.db.dataobject.bigdata.DirectlyStoreUpDO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * description:
 *
 * @author: haodong
 * @data: 2020/8/29 17:09
 */
public interface DirectlyStoreMapper {


    /**
     * 根据分页后结果参数多条件查询
     *
     * @param directlyStore
     * @return
     */
    List<DirectlyStoreDO> listBySelective(DirectlyStoreDO directlyStore);


    /**
     * 根据ID集合查询
     *
     * @param storeCodeList
     * @return
     */
    List<DirectlyStoreDO> listByStoreCode(List<String> storeCodeList);

    /**
     * 查询出符合条件所有数据
     *
     * @param directlyStoreQueryToDO 直接存储查询
     * @return {@link List<DirectlyStoreDO>}
     */
    List<DirectlyStoreDO> listAllInfo(DirectlyStoreDO directlyStoreQueryToDO);

    /**
     * 更新状态
     *
     * @param directlyStoreQueryToDOS 直接存储查询dos
     * @return {@link Integer}
     */
    Integer updateStatus(@Param("directlyStoreQueryToDOS") List<DirectlyStoreDO> directlyStoreQueryToDOS);

    /**
     * 查询出所有信息的时间
     *
     * @param startTime 日期
     * @param endTime   结束时间
     * @return {@link List<DirectlyStoreDO>}
     */
    List<DirectlyStoreDO> listAllInfoByTime(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 更新状态和最后确认数量
     *
     * @param storeDOS dto做
     * @return {@link Integer}
     */
    Integer updateStatusAndLastConfirmQty(@Param("storeDOS") List<DirectlyStoreDO> storeDOS);

    /**
     * test 根据门店和日期获取所有需要更新的数据（默认为13天数据，今日起）
     *
     * @param storeCode
     * @param startDate
     * @param endDate
     * @return {@link List<DirectlyStoreDO>}
     **/
    List<DirectlyStoreDO> listAllByStoreAndDate(@Param("storeCode") List<String> storeCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 根据门店和日期获取所有需要更新的数据（默认为13天数据，今日起）
     *
     * @param storeCode
     * @param startDate
     * @param endDate
     * @return {@link List<DirectlyStoreDO>}
     **/
    List<DirectlyStoreInDO> listInByStoreAndDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
    /**
     * 根据门店和日期获取所有需要更新的数据（默认为13天数据，今日起）
     *
     * @param storeCode
     * @param startDate
     * @param endDate
     * @return {@link List<DirectlyStoreDO>}
     **/
    List<DirectlyStoreUpDO> listUpByStoreAndDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
    /**
     * 批量新增
     *
     * @param directlyStoreInDOs
     * @return void
     **/
    void batchInsert(List<DirectlyStoreInDO> directlyStoreInDOs);

    /**
     * 删除对应标识的数据
     *
     * @param opSign
     */
    void delete(@Param("opSign") String opSign);

    /**
     * 删除当前日期之后的所有数据
     *
     * @param storeCode
     * @param startDate
     * @return void
     **/
    void batchDeleteByStartDate(@Param("storeCode") String storeCode, @Param("startDate") Date startDate);

    void rmByIds(List<Long> ids);

    void upByIds(List<DirectlyStoreUpDO> list);

    void deleteByOpSign(String opSign);

    List<DirectlyStoreDO> listByCondition(SalesPlanSelectDO salesPlanSelect);
}
